﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;

namespace WindowsFormsApplication1
{
    public partial class frmConfig : Form
    {
        public frmConfig()
        {
            InitializeComponent();
            populateFavorecidos();
        }

        private void rbIniFixa_CheckedChanged(object sender, EventArgs e)
        {
            dtpIniFixa.Enabled = rbIniFixa.Checked;
            udIniAdd.Enabled = rbIniHoje.Checked;
        }

        private void rbFimFixa_CheckedChanged(object sender, EventArgs e)
        {
            dtpFimFixa.Enabled = rbFimFixa.Checked;
            udFimAdd.Enabled = rbFimHoje.Checked;
        }

        private void btOK_Click(object sender, EventArgs e)
        {

        }

        public void populateFavorecidos()
        {
            cbFavorecidos.DataSource = null;
            cbFavorecidos.DataSource = listarFavorecidos().Tables[0].DefaultView;
            cbFavorecidos.ValueMember = "favorecido";
            cbFavorecidos.DisplayMember = "favorecido";
        }

        private DataSet listarFavorecidos()
        {
            if (frmPrincipal.conn == null)
            {
                frmPrincipal.conn = new SQLiteConnection(frmPrincipal.strConn);
                frmPrincipal.conn.Open();
            }
            SQLiteDataAdapter adp = new SQLiteDataAdapter(@"SELECT _id, favorecido FROM config", frmPrincipal.conn);
            DataSet retorno = new DataSet();
            adp.Fill(retorno);

            return retorno;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String novoFav = "";
            if (InputBox.show("Novo favorecido", "Cnpj", ref novoFav) == DialogResult.OK)
            {
                if (!existeFavorecido(novoFav))
                {
                    gravaFavorecido(novoFav);
                    populateFavorecidos();
                    cbFavorecidos.SelectedValue = novoFav;
                }
                else
                {
                    MessageBox.Show("CNPJ já cadastrado.");
                }
            }
        }

        private bool existeFavorecido(String cnpj)
        {
            if (frmPrincipal.conn == null)
            {
                frmPrincipal.conn = new SQLiteConnection(frmPrincipal.strConn);
                frmPrincipal.conn.Open();
            }

            SQLiteCommand comando = new SQLiteCommand(@"select * from config where favorecido = " + cnpj, frmPrincipal.conn);
                SQLiteDataReader drConfig = comando.ExecuteReader();

            return drConfig.HasRows;
        }

        private void updateFavorecido()
        {
            if (frmPrincipal.conn == null)
            {
                frmPrincipal.conn = new SQLiteConnection(frmPrincipal.strConn);
                frmPrincipal.conn.Open();
            }

            SQLiteTransaction trans;

            SQLiteCommand comando = new SQLiteCommand(@"UPDATE config set email = @email, smtp_email = @smtp_email, "+
                @"user_name = @user_name, password = @password, porta_email = @porta_email, "+
                @"usar_ssl = @usar_ssl WHERE favorecido = "+cbFavorecidos.SelectedValue);
            comando.Parameters.AddWithValue("@email", tbEmail.Text);
            comando.Parameters.AddWithValue("@smtp_email", tbSmtp.Text);
            comando.Parameters.AddWithValue("@user_name", tbUser.Text);
            comando.Parameters.AddWithValue("@password", tbSenha.Text);
            comando.Parameters.AddWithValue("@porta_email", tbPorta.Text);
            comando.Parameters.AddWithValue("@usar_ssl", cbSegura.Checked.ToString());

            comando.Connection = frmPrincipal.conn;

            trans = frmPrincipal.conn.BeginTransaction();
            try
            {
                comando.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                trans.Rollback();
                MessageBox.Show(e.Message);
            }
            finally
            {
                trans.Commit();
                comando.Dispose();
            }
        }

        private void gravaFavorecido(String cnpj)
        {
            if (frmPrincipal.conn == null)
            {
                frmPrincipal.conn = new SQLiteConnection(frmPrincipal.strConn);
                frmPrincipal.conn.Open();
            }

            SQLiteTransaction trans;

            SQLiteCommand comando = new SQLiteCommand(@"INSERT INTO config (url, hora_monitor, favorecido, data_inicial, "+
                @"acrescimo_inicio, data_termino, acrescimo_termino, email, smtp_email, user_name, password, porta_email, "+
                @"usar_ssl, reenviar) VALUES (@url, @hora_monitor, @favorecido, @data_inicial, " +
                @"@acrescimo_inicio, @data_termino, @acrescimo_termino, @email, @smtp_email, @user_name, @password, @porta_email, " +
                @"@usar_ssl, @reenviar)");
            comando.Parameters.AddWithValue("@url", frmPrincipal.urlCfg);
            comando.Parameters.AddWithValue("@hora_monitor", frmPrincipal.horaMonitor);
            comando.Parameters.AddWithValue("@favorecido", cnpj);
            comando.Parameters.AddWithValue("@data_inicial", frmPrincipal.tipoInicio);
            comando.Parameters.AddWithValue("@acrescimo_inicio", frmPrincipal.addIni.ToString());
            comando.Parameters.AddWithValue("@data_termino", frmPrincipal.tipoFinal);
            comando.Parameters.AddWithValue("@acrescimo_termino", frmPrincipal.addFim.ToString());
            comando.Parameters.AddWithValue("@email", frmPrincipal.email);
            comando.Parameters.AddWithValue("@smtp_email", frmPrincipal.smtp);
            comando.Parameters.AddWithValue("@user_name", frmPrincipal.userName);
            comando.Parameters.AddWithValue("@password", frmPrincipal.password);
            comando.Parameters.AddWithValue("@porta_email", frmPrincipal.porta.ToString());
            comando.Parameters.AddWithValue("@usar_ssl", frmPrincipal.conexaoSegura.ToString());
            comando.Parameters.AddWithValue("@reenviar", frmPrincipal.reenviar.ToString());

            comando.Connection = frmPrincipal.conn;

            trans = frmPrincipal.conn.BeginTransaction();
            try
            {
                comando.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                trans.Rollback();
                MessageBox.Show(e.Message);
            }
            finally
            {
                trans.Commit();
                comando.Dispose();
            }
        }
    }
}
